
--协程测试

--[[local co = coroutine.create(function() print("Hello World") end)
print(coroutine.status(co))
coroutine.resume(co)
print(coroutine.status(co))--]]

--[[local co = coroutine.create(function()
	for i = 1,10 do
		print("co",i)
		coroutine.yield()
	end
end)

--打印初始状态
print(coroutine.status(co))

--唤醒协同程序co
coroutine.resume(co)

--打印协同程序的状态
print(coroutine.status(co))

--再次唤醒协同程序
coroutine.resume(co)

--打印协同程序的状态
print(coroutine.status(co))

coroutine.resume(co)     -- 打印co 3
coroutine.resume(co)     -- 打印co 4
coroutine.resume(co)     -- 打印co 5
coroutine.resume(co)     -- 打印co 6
coroutine.resume(co)     -- 打印co 7
coroutine.resume(co)     -- 打印co 8
coroutine.resume(co)     -- 打印co 9
coroutine.resume(co)     -- 打印co 10
coroutine.resume(co)     -- 什么都不打印
print(coroutine.status(co))     -- dead
coroutine.resume(co)--]]
--[[function foo (a)
    print("foo", a)  -- foo 2
    return coroutine.yield(2 * a) -- return 2 * a
end

co = coroutine.create(function (a , b)
    print("co-body", a, b) -- co-body 1 10
    local r = foo(a + 1)

    print("co-body2", r)
    local r, s = coroutine.yield(a + b, a - b)

    print("co-body3", r, s)
    return b, "end"
end)

print("main", coroutine.resume(co, 1, 10)) -- true, 4
print("------")
print("main", coroutine.resume(co, "r")) -- true 11 -9
print("------")
print("main", coroutine.resume(co, "x", "y")) -- true 10 end
print("------")
print("main", coroutine.resume(co, "x", "y")) -- false cannot resume dead coroutine
print("------")--]]


--[[local newProductor

function productor()
     local i = 0
     while true do
          i = i + 1
          send(i)     -- 将生产的物品发送给消费者
     end
end

function consumer()
     while true do
          local i = receive()     -- 从生产者那里得到物品
          print(i)
     end
end

function receive()
     local status, value = coroutine.resume(newProductor)
     return value
end

function send(x)
     coroutine.yield(x)     -- x表示需要发送的值，值返回以后，就挂起该协同程序
end

-- 启动程序
newProductor = coroutine.create(productor)
consumer()--]]
